package com.tenglong.teacher.ui;

import android.graphics.Bitmap;
import android.os.Build;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.ViewGroup;
import android.view.ViewParent;
import android.webkit.WebSettings;
import android.webkit.WebView;

import com.cuotibao.zhuoxiao.basics.utils.IpUtils;
import com.cuotibao.zhuoxiao.basics.utils.MyWebChromeClient;
import com.cuotibao.zhuoxiao.basics.utils.MyWebViewClient;
import com.cuotibao.zhuoxiao.basics.utils.ShowImageJsWebInterface;
import com.cuotibao.zhuoxiao.basics.utils.ToastUtils;
import com.tenglong.teacher.R;
import com.tenglong.teacher.services.hdx.CreateRequestEntity;
import com.tenglong.teacher.ui.common.activity.BaseActivity;

public class WebActivity extends BaseActivity {

    public static final String KEY_WEB_URL = WebActivity.class.getSimpleName() + "key_url";
    public static final String KEY_WEB_IS_ZOOM = WebActivity.class.getSimpleName() + "key_is_zoom";

    private WebView mWebView;
    private String url;
    private boolean isZoom;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_web);
        String urlParam = getIntent().getStringExtra(KEY_WEB_URL);
        isZoom = getIntent().getBooleanExtra(KEY_WEB_IS_ZOOM, false);
        if (TextUtils.isEmpty(urlParam)) {
            ToastUtils.showCenterToast("缺少url参数");
            return;
        }
        if (urlParam.startsWith("https://") || urlParam.startsWith("http://")) {
            url = urlParam;
        } else {
            url = IpUtils.getImageUrl(urlParam);
        }
        Log.e("webUrl", url);
        initView();
        setWebView();
        mWebView.loadUrl(url);
    }

    private void setWebView() {
        WebSettings settings = mWebView.getSettings();
        //设置WebView是否允许执行JavaScript脚本，默认false，不允许。
        settings.setJavaScriptEnabled(true);
        //是否允许在WebView中访问内容URL（Content Url），默认允许
        settings.setAllowContentAccess(true);
        //是否允许访问文件，默认允许
        settings.setAllowFileAccess(true);
        //是否允许运行在一个URL环境（the context of a file scheme URL）中的JavaScript访问来自其他URL环境的内容，为了保证安全，应该不允许。
        settings.setAllowFileAccessFromFileURLs(false);
        //是否允许运行在一个file schema URL环境下的JavaScript访问来自其他任何来源的内容，包括其他file schema URLs.
        settings.setAllowUniversalAccessFromFileURLs(true);
        //应用缓存API是否可用，默认值false, 结合setAppCachePath(String)使用。
        settings.setAppCacheEnabled(false);
//        //设置应用缓存文件的路径。为了让应用缓存API可用，此方法必须传入一个应用可写的路径。该方法只会执行一次，重复调用会被忽略。
//        settings.setAppCachePath(null);
        //是否使用内置的缩放机制。
        settings.setBuiltInZoomControls(isZoom);
        //是否显示缩放控件
        settings.setDisplayZoomControls(false);
        //重写使用缓存的方式，默认值LOAD_DEFAULT。缓存的使用方式基于导航类型，正常的页面加载，检测缓存，需要时缓存内容复现。导航返
        // 回时，内容不会复现，只有内容会从缓存盘中恢复。该方法允许客户端通过指定LOAD_DEFAULT, LOAD_CACHE_ELSE_NETWORK, LOAD_NO_CACHE or LOAD_CACHE_ONLY的其中一项来重写其行为。
        settings.setCacheMode(WebSettings.LOAD_NO_CACHE);
        //设置WebView字体库字体，默认“cursive”
        settings.setCursiveFontFamily("cursive");
        //让JavaScript自动打开窗口，默认false。适用于JavaScript方法window.open()。
        settings.setJavaScriptCanOpenWindowsAutomatically(false);
        //是否允许WebView度超出以概览的方式载入页面，默认false。即缩小内容以适应屏幕宽度。该项设置在内容宽度超出WebView控件的宽度时生效，例如当getUseWideViewPort() 返回true时。
        settings.setLoadWithOverviewMode(false);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
            //WebView是否需要用户的手势进行媒体播放，默认值为true。
            settings.setMediaPlaybackRequiresUserGesture(true);
        }
        //调用requestFocus(int, android.graphics.Rect)时是否需要设置节点获取焦点，默认值为true。
        settings.setNeedInitialFocus(true);
        //当WebView切换到后台但仍然与窗口关联时是否raster tiles，打开它可以避免在WebView从后台切换到前台时重新绘制，默认值false。在这种模式下后台的WebView占用更多的内存。请按如下准则显示内存的使用：
        //
        //WebView的尺寸不能比设备的屏幕尺寸更大；
        //限制在少数WebView上使用该模式；
        //在可见的WebView和即将显现的WebView上使用；
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            settings.setOffscreenPreRaster(true);
        }
        //WebView是否保存表单数据，默认值true。
        settings.setSaveFormData(true);
        //设置WebView是否支持多窗口。如果设置为true，主程序要实现onCreateWindow(WebView, boolean, boolean, Message)，默认false。
        settings.setSupportMultipleWindows(true);
//        //WebView是否支持HTML的“viewport”标签或者使用wide viewport。设置值为true时，布局的宽度总是与WebView控件上的设备无关像素（device-dependent pixels）宽度一致。
//        // 当值为true且页面包含viewport标记，将使用标签指定的宽度。如果页面不包含标签或者标签没有提供宽度，那就使用wide viewport。
//        settings.setUseWideViewPort (true);

        mWebView.addJavascriptInterface(new ShowImageJsWebInterface(this), "imageControl");
        mWebView.setWebViewClient(new MyWebViewClient(){
            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                super.onPageStarted(view, url, favicon);
                showProgressDialog("网页加载中...");
            }

            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
                dismissProgressDialog();
            }
        });
        mWebView.setWebChromeClient(new MyWebChromeClient() {
            @Override
            public void onReceivedTitle(WebView view, String title) {
                super.onReceivedTitle(view, title);
                setTitle(title);
            }
        });
    }

    private void initView() {
        mWebView = findViewById(R.id.mWebView);
        mWebView.setHorizontalScrollBarEnabled(false);
        mWebView.setVerticalScrollBarEnabled(false);
    }

    @Override
    public void onBackPressed() {
        if (mWebView.canGoBack()) {
            mWebView.goBack();
        } else {
            super.onBackPressed();
        }
    }

    @Override
    protected void onResume() {
        super.onResume();
        mWebView.onResume();
    }

    @Override
    protected void onPause() {
        super.onPause();
        mWebView.onPause();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (mWebView != null) {
            ViewParent viewParent = mWebView.getParent();
            if (viewParent != null) {
                ((ViewGroup) viewParent).removeView(mWebView);
            }
            mWebView.getSettings().setJavaScriptEnabled(false);
            mWebView.clearHistory();
            mWebView.clearView();
            mWebView.removeAllViews();
            mWebView.destroy();
        }
    }

}
